//
// Created by liushuai on 2021/2/21.
//

#include "islandPerimeter.h"
<<<<<<< HEAD:cxx/algorithm/src/islandPerimeter.cc
static int adj=1;
static int count = 0;
//void dfs(vector<vector<int>> &grid, int r, int c) {
//    count+=1;
//    grid[r][c] = 0;
//    if (r - 1 >= 0 && grid[r - 1][c] == 1){
//        ++adj;
//        dfs(grid, r - 1, c);
//    }
//
//    if (r + 1 < grid.size() && grid[r + 1][c] == 1){
//        ++adj;
//        dfs(grid, r + 1, c);
//    }
//
//    if (c - 1 >= 0 && grid[r][c - 1] == 1){
//        ++adj;
//        dfs(grid, r, c - 1);
//    }
//
//    if (c + 1 < grid[0].size() && grid[r][c + 1] == 1){
//        ++adj;
//        dfs(grid, r, c + 1);
//    }
//
//
//}

int islandPerimeter(vector<vector<int>> &grid) {
    if (grid.empty())
        return 0;
    if (grid[0].empty())
        return 0;
    int islandNum = 0;
    int adjNum = 0;

    int rows = grid.size();
    int cols = grid[0].size();
    for (int r = 0; r < rows; r++) {
        for (int c = 0; c < cols; c++) {
            if (grid[r][c] == 1) {
                islandNum++;
                if(r<rows-1){
                    if(grid[r+1][c] == 1)
                        adjNum++;
                }
                if(c<cols-1){
                    if(grid[r][c+1]==1)
                        adjNum++;
                }
            }
        }
    }
    return 4*islandNum-2*adjNum;
}
//slandPerimeter(int[][] grid) {
//    int totolCount = 0;
//    int sideCount = 0;
//    int width = grid.length;
//    int hight = grid[0].length;
//    for(int x = 0; x < width; x++){
//        for(int y =0; y < hight; y++){
//            if(grid[x][y] == 1){
//                totolCount ++;
//                if(x < width -1){
//                    if(grid[x + 1][y] == 1){
//                        sideCount++;
//                    }
//                }
//                if(y < hight -1){
//                    if(grid[x][y+1] == 1){
//                        sideCount++;
//                    }
//                }
//            }
//        }
//    }
//    return totolCount * 4 - sideCount * 2;
//}
=======
static int adj = 1;
static int count = 0;
// void dfs(vector<vector<int>> &grid, int r, int c) {
//     count+=1;
//     grid[r][c] = 0;
//     if (r - 1 >= 0 && grid[r - 1][c] == 1){
//         ++adj;
//         dfs(grid, r - 1, c);
//     }
//
//     if (r + 1 < grid.size() && grid[r + 1][c] == 1){
//         ++adj;
//         dfs(grid, r + 1, c);
//     }
//
//     if (c - 1 >= 0 && grid[r][c - 1] == 1){
//         ++adj;
//         dfs(grid, r, c - 1);
//     }
//
//     if (c + 1 < grid[0].size() && grid[r][c + 1] == 1){
//         ++adj;
//         dfs(grid, r, c + 1);
//     }
//
//
// }

int islandPerimeter(vector<vector<int>> &grid) {
  if (grid.empty()) return 0;
  if (grid[0].empty()) return 0;
  int islandNum = 0;
  int adjNum = 0;

  int rows = grid.size();
  int cols = grid[0].size();
  for (int r = 0; r < rows; r++) {
    for (int c = 0; c < cols; c++) {
      if (grid[r][c] == 1) {
        islandNum++;
        if (r < rows - 1) {
          if (grid[r + 1][c] == 1) adjNum++;
        }
        if (c < cols - 1) {
          if (grid[r][c + 1] == 1) adjNum++;
        }
      }
    }
  }
  return 4 * islandNum - 2 * adjNum;
}
// slandPerimeter(int[][] grid) {
//     int totolCount = 0;
//     int sideCount = 0;
//     int width = grid.length;
//     int hight = grid[0].length;
//     for(int x = 0; x < width; x++){
//         for(int y =0; y < hight; y++){
//             if(grid[x][y] == 1){
//                 totolCount ++;
//                 if(x < width -1){
//                     if(grid[x + 1][y] == 1){
//                         sideCount++;
//                     }
//                 }
//                 if(y < hight -1){
//                     if(grid[x][y+1] == 1){
//                         sideCount++;
//                     }
//                 }
//             }
//         }
//     }
//     return totolCount * 4 - sideCount * 2;
// }
>>>>>>> dev:cxx/algorithm/common/src/islandPerimeter.cc
